package com.cj.mobile.iabp.mvp.contract;

import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
import com.cj.mobile.iabp.mvp.model.entity.AppUpdate;
import com.jess.arms.cj.CommonResponse;
import com.cj.mobile.iabp.mvp.model.entity.LoginResponse;

import io.reactivex.Observable;


public interface LoginContract {
    //对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
    interface View extends IView {
        /** 设置 账号 */
        void setUsernName(String usernName);
        /** 设置 密码 */
        void setPassword(String password);
        /** 跳转致首页 */
        void jumbToMain();

        /** 升级询问 */
        void askDialog(AppUpdate info);

        /**
         * 禁用“发送验证码”按钮
         */
        void onDisableSendVerificationCodeButton();

        /**
         * 启用“发送验证码”按钮
         */
        void onEnableSendVerificationCodeButton();

        /**
         * 设置“倒计时”提示
         */
        void setCountDownTips(String str);

        /**
         * 禁用按钮
         */
        void onDisableClick();

        /**
         * 启用按钮
         */
        void onEnableClick();

    }

    //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
    interface Model extends IModel {
        /** 账号密码登录 */
        Observable<LoginResponse> toLogin(String username, String password);
        /** 短息登录 */
        Observable<LoginResponse> quickLogin(String username, String code);

        /** 登录-获取短信验证码 */
        Observable<CommonResponse> sendSMS(String mobile);

        /** 获取APP版本信息 */
        Observable<AppUpdate> getVersion(String type);
    }
}
